#Author: Tanyong
# *-* coding:utf8 *-*
# @time       : 2018/7/17 20:46
# @Author     : Tanyong
# @Site       : 
# @File       : views.py
# @Software   : PyCharm
from flask import current_app, jsonify
from flask import g
from flask import redirect
from flask import render_template
from flask import request
from flask import session
from flask import url_for

from info.models import User, News, Category
from info.utils.common import user_login_data
from info.utils.response_code import RET
from . import index_blu

@index_blu.route('/')
@user_login_data
def index():
    """
    首页
    1, 用户登陆后 右上角上的显示
    2, 首页里右边 点击排行的显示
    :return:
    """
    # 1, 用户登陆后 右上角上的显示
    user = g.user

    # 2, 首页里右边 点击排行的显示
    news_list = []
    try:
        news_list = News.query.order_by(News.clicks.desc()).limit(6)
    except Exception as e:
        current_app.logger.error(e)
    news_list_li = []
    for news in news_list:
        news_list_li.append(news.to_basic_dict())

    # 3, 点击分类加载数据
    categories = Category.query.all()
    category_li = []
    for category in categories:
        category_li.append(category.to_dict())

    data = {
        'user': user.to_dict() if user else None,
        "news_list_li": news_list_li,
        "category_li": category_li
    }

    return render_template('news/index.html', data=data)


@index_blu.route('/news_list')
def news_list():
    """
    首页新闻列表
    1、因为设计到分页和分类，所以需要接收两个参数（page，cid）
    2、校验参数
    3、根据不同条件查询，为了将用同一条查询语句，需要将查询条件封装到一个filters列表中（因为分类中没有1的id）
    4、将查询进行分页 paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, 10, False)
    paginate.items.  [obj, obj, obj]
    5、将对象列表转换为字典列表
    6、将数据返回
    :return:
    """
    # 1、因为设计到分页和分类，所以需要接收两个参数（page，cid）
    params_dict = request.args
    page = params_dict.get('page', "1")
    cid = params_dict.get('cid', "1")
    per_page = params_dict.get('per_page', "10")

    # 2、校验参数。
    try:
        page = int(page)
        per_page = int(per_page)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")

    # 3、根据不同条件查询，为了将用同一条查询语句，需要将查询条件封装到一个filters列表中（因为分类中没有1的id）
    # 审核未通过的新闻不显示
    filters = [News.status==0]
    if cid != '1':
        filters.append(News.category_id == cid)

    # 4、将查询进行分页 paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, 10, False)
    paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, per_page, False)
    news_model_list = paginate.items
    current_page = paginate.page
    total_pages = paginate.pages

    # 5、将对象列表转换为字典列表
    news_list_li = []
    for news in news_model_list:
        news_list_li.append(news.to_basic_dict())

    data = {
        "news_list_li": news_list_li,
        "current_page": current_page,
        "total_pages": total_pages
    }

    return jsonify(errno=RET.OK, errmsg="分类页成功", data = data)



@index_blu.route('/favicon.ico')
def favicon():
    return current_app.send_static_file('news/favicon.ico')
    # 下面直接重定向到 static文件夹的方法同样可行
    # return redirect(url_for("static/news/favicon.ico"))